Utreexo で IBD が早くなる理由
現在の UTXOs を得るためには、すべてのブロックを検証して、いまの UTXO の状態を得る必要がある
ほかの full node から Tx をダウンロードして、検証して、Block ごとの UTXO set をつくっていく
Block 1 の UTXO set ができた
Block 2 の Tx をもらう
Input が Block 1 の Utxo set に含まれていることを検証する
だから utxo set が必要
コスト
disk I/O
disk size
正しい Utreexo markle root だけをもっていれば、Tx をもらって、tree を構成すれば検証できる
正しい Utreexo root であることは?
ブロックに含めてしまえば取得はできる
最新の root がもっとも hash power がのった chain の root であれば ok ということ?
多分そう
markle root だけ持てばいい utreexo の場合は、UTXO 全体をメモリにおいておけることになるので disk I/O が不要になり高速化できる
ただし、proof の分だけダウロードするデータは増加する
検証を任意の block height から始めることはできない
任意の block の UTXOs がわからないため
Utreexo の markle root は実際の UTXO に比べて小さいため、ブロックごとの UTXO を保持することも可能
ブロックごとの UTXOs がわかれば、任意の block から検証をはじめることができる
つまり並列化できる
markle root はどこから手に入れる?それが正しい保証は?
正しいかどうかはすべての検証を行って辻褄が合うかどうかでわかる
Utreexo archival node から root と proof を受け取るのか?
特定のブロック高ごとに markle root を取っておけば、すなわち snapshot を作成しておけば、並行して IBD を実施できるの高速になる
markle root のデータは小さいので、ブロックのデータに加えて保持しても、保存や送信で困らない
従来はブロック1から順番に検証していくしかなかった
なぜならば、正しい UTXO は前のブロックを検証することでしか知ることができないから
ブロックと UTXO をセットにして snapshot を取っておくことで、任意のブロックとUTXOをダウンロードしてそのブロック単体を検証することができる